// 将扁平化的数据转换为树形结构数据的方法
export function transTree(list) {
  // 入参 list：要被转换的扁平化数据

  // 返回值 treeList：转换后的树形结构数据
  const treeList = []

  // 为了更好的寻找 id，创建一个 id 和 item 的映射关系
  const map = {}
  list.forEach(item => {
    map[item.id] = item
  })
  // 扁平化数据
  // { id: "1175311373083017216", pid: "", name: "技术部" },
  // { id: "1235398608847052800", pid: "1175311373083017216", name: "Java研发部" },
  // { id: "1235398661355544576", pid: "1175311373083017216", name: "Python研发部" },
  // { id: "1235398708763762688", pid: "1175311373083017216", name: "Php研发部" }

  // id 和 item 的映射关系
  // map = {
  //   1175311373083017216: { id: "1175311373083017216", pid: "", name: "技术部" },
  //   1235398608847052800: { id: "1235398608847052800", pid: "1175311373083017216", name: "Java研发部" },
  //   1235398661355544576: { id: "1235398661355544576", pid: "1175311373083017216", name: "Python研发部" },
  //   1235398708763762688: { id: "1235398708763762688", pid: "1175311373083017216", name: "Php研发部" }
  // }
  list.forEach(item => {
    if (map[item.pid]) {
      // 找到了 item 的父节点
      // map[item.pid] 就是 item 的父节点
      if (!map[item.pid].children) {
        map[item.pid].children = []
      }
      // 将孩子放入父节点的 children 数组中
      map[item.pid].children.push(item)
    } else {
      // 如果没有找到父节点，说明他是顶级节点，直接放入 treeList 中
      treeList.push(item)
    }
  })
  // 返回值 treeList：转换后的树形结构数据
  return treeList
}

export function recurTransTree(list, pid) {
  // 入参 list：扁平化数据
  // 入参 pid：父 id

  // 收集本地递归找到的孩子的数组
  const treeList = []

  list.forEach(item => {
    // 1. 递归终止条件
    if (item.pid === pid) {
      // 如果 item.pid === 传进来的 pid，说明item 是 pid 的孩子
      // 2. 处理当前层
      treeList.push(item)
      // 3. 下钻到下一层
      const children = recurTransTree(list, item.id)
      if (children.length) {
        // 找到孩子后，才设置 children 树形
        item.children = children
      }
    }
  })
  // 返回值：找到的所有以 pid 为父节点的孩子数组
  return treeList
}
